﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ContaTelefone.Entities;
using ContaTelefone.Process;
using System.IO;

namespace ContaTelefone
{
    public partial class frmImportarConta : Form
    {
        public frmImportarConta()
        {
            InitializeComponent();

            dtpDtInicio.Value = DateTime.Now;
            dtpDtFim.Value = DateTime.Now;
        }

        private void btnLoc_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofdArquivo = new OpenFileDialog();

            try
            {
                ofdArquivo.Multiselect = true;

                ofdArquivo.Filter = "Texto (*.txt)|*.txt|Todos (*.*)|*.*";
                ofdArquivo.ShowDialog();

                if (ofdArquivo.CheckFileExists)
                {
                    txtConta.Text = ofdArquivo.FileName;
                    btnImportar.Enabled = true;
                }
                else
                    btnImportar.Enabled = false;
            
            }
            catch
            {}
        }

        private void btnImportar_Click(object sender, EventArgs e)
        {
            ContaProcess contaProc = new ContaProcess();
            ContaLigacaoProcess contaLigProc = new ContaLigacaoProcess();

            ContaEntities contaEtt;
            ContaLigacaoEntities contaLigEtt;

            try
            {

                contaEtt = contaProc.getobj(dtpDtInicio.Value);
                if (contaEtt != null)
                {
                    if (MessageBox.Show("Período já importado, deseja re-importar?", "Conta Telefone", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
                        contaProc.Delete(contaEtt);
                    else
                        return;
                }

                contaEtt = new ContaEntities();
                contaEtt.DataFim = dtpDtFim.Value;
                contaEtt.DataInicio = dtpDtInicio.Value;
                contaProc.Incluir(contaEtt);
                contaEtt = contaProc.getobj(dtpDtInicio.Value);

                if (contaEtt == null)
                    return;

                StreamReader sr = new StreamReader(txtConta.Text, System.Text.Encoding.GetEncoding("ISO-8859-1"));
                string linha; long qtd = 0; string[] strCampos;
                decimal valor; DateTime datahora;

                lblProcessando.Visible = true;
                lblProcessando.Text = string.Format("Processando: {0}", qtd);

                while (!sr.EndOfStream)
                {
                    qtd++;
                    linha = sr.ReadLine();
                    lblProcessando.Text = string.Format("Processando: {0}", qtd);

                    if (qtd % 20 == 0)
                        Application.DoEvents();
 
                    //if (qtd % 500 == 0)
                    //{
                    //    contaLigProc.SalvarAlteracoes();
                    //    contaLigProc.RefreshEntity();
                    //}
                
                    strCampos = linha.Split(';');
                    if (strCampos.Length == 20)
                    {
                        if (strCampos[3] != string.Empty && strCampos[11] != string.Empty && strCampos[0] != "NumNF")
                        {
                            contaLigEtt = new ContaLigacaoEntities();
                            contaLigEtt.ID = qtd;
                            contaLigEtt.ID_CONTA = contaEtt.ID;
                            contaLigEtt.NumNF = strCampos[0];
                            contaLigEtt.NumIDCli = strCampos[1];
                            contaLigEtt.MesRef = strCampos[2];
                            contaLigEtt.NumAcs = strCampos[3];
                            contaLigEtt.Plano = strCampos[4];
                            contaLigEtt.Nome = strCampos[5];
                            contaLigEtt.Tpserv = strCampos[6];

                            if (strCampos[7] != string.Empty && strCampos[8] != string.Empty)
                                if (DateTime.TryParse(strCampos[7] + " " + strCampos[8], out datahora))
                                    contaLigEtt.Data = datahora;

                            contaLigEtt.Origem = strCampos[9];
                            contaLigEtt.Destino = strCampos[10];
                            contaLigEtt.NumCham = strCampos[11];
                            contaLigEtt.Tipo = strCampos[12];
                            contaLigEtt.Duracao = strCampos[13];
                            if (decimal.TryParse("0" + strCampos[14], out valor))
                                contaLigEtt.Valor = valor;
                            contaLigEtt.OperLD = strCampos[15];
                            contaLigEtt.TIMID = strCampos[16];
                            contaLigEtt.Alíquota = strCampos[17];
                            contaLigEtt.CodFEBRABAN = strCampos[18];
                            if (decimal.TryParse("0" + strCampos[19], out valor))
                                contaLigEtt.TotalGeral = valor;

                            contaLigProc.IncluirADODb(contaLigEtt);

                            txtLog.Text += string.Format("Linha {0}: Importada \r\n", qtd);
                        }
                        else
                            txtLog.Text += string.Format("Linha {0}: Ignorada. Não é uma ligação \r\n", qtd);
                    }
                    else
                        txtLog.Text += string.Format("Linha {0}: Inválida \r\n", qtd);

                }
                
                //contaLigProc.SalvarAlteracoes();

                sr.Close();
                sr.Dispose();

                MessageBox.Show("Conta importada com sucesso!", "Conta Telefone");
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Erro: {0}", ex.Message));
            }

        }

        private void btnFechar_Click(object sender, EventArgs e)
        {
            this.Close();
            this.Dispose();
        }

    }
}
